Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 循环遍历字符串数组并与以前的值进行比较_C#_Arrays_String - Fatal编程技术网

C# 循环遍历字符串数组并与以前的值进行比较

C# 循环遍历字符串数组并与以前的值进行比较,c#,arrays,string,C#,Arrays,String,我需要遍历一个字符串数组,并知道我以前是否见过一个特定的字符串值。通常,我会用其他语言写类似的东西: String oldValue=""; String newValue; for (i=0;i<myarray.Length;i++) { newValue=myarray[i]; if (oldValue==newValue) break; ... oldValue=newValue; } 字符串oldValue=”“; 字符串new

我需要遍历一个字符串数组,并知道我以前是否见过一个特定的字符串值。通常,我会用其他语言写类似的东西:

String oldValue="";
String newValue;
for (i=0;i<myarray.Length;i++)
{
    newValue=myarray[i];
    if (oldValue==newValue)
        break;
    ...

    oldValue=newValue;

}
字符串oldValue=”“;
字符串newValue;

对于(i=0;i我不确定是否理解您的问题,但如果您想要检测数组中重复的第一个字符串,则需要记住所有字符串。我建议使用哈希集,因此它至少以O(n)形式运行,如下所示:

HashSet<string> prevSet = new HashSet<string>();

foreach ( string str in myArray )
  if ( !prevSet.Add(str) ) return str;
HashSet prevSet=new HashSet();
foreach(myArray中的字符串str)
如果(!prevSet.Add(str))返回str;

我不确定是否理解了您的问题,但如果您想要检测数组中重复的第一个字符串,则需要记住所有字符串。我建议使用哈希集,因此至少它以O(n)形式运行,如下所示:

HashSet<string> prevSet = new HashSet<string>();

foreach ( string str in myArray )
  if ( !prevSet.Add(str) ) return str;
HashSet prevSet=new HashSet();
foreach(myArray中的字符串str)
如果(!prevSet.Add(str))返回str;

您可以这样做来列出词频:

var frequency =
    myarray
        .GroupBy(x => x)
        .Select(x => new
        {
            Value = x.Key,
            Count = x.Count(),
        });

然后,您可以在
Count>1

的位置筛选此列表。您可以这样做来创建词频列表:

var frequency =
    myarray
        .GroupBy(x => x)
        .Select(x => new
        {
            Value = x.Key,
            Count = x.Count(),
        });

然后,您可以在
Count>1

字符串不可变的情况下筛选此列表,但仍然可以将变量分配给新值。您是否可以发布一个完整的代码示例来演示您遇到的问题?(如果您有,请参考上面格兰特的评论;您在哪里分配了
newValue
?显然这不是一个完整的程序;它不会按原样编译。)看起来你并没有真正尝试过这一点。抱歉,伙计们,我没有设置新值。我将其编辑为include.Hi Trebor--我想你误解了.net中不可变字符串的含义。你仍然可以为字符串变量分配新值--该变量不是只读的,也不是一次性初始化的。不可变性只是意味着1.E每当您为字符串变量指定一个新值时,就会在幕后分配一个新字符串,2.您不能只更改字符串中的一个字符,如newValue[2]='g';Chris和JMarsch,你们每个人都用我不理解的东西击中了它的头部。我在上一个任务中遇到了不变性问题,离开时认为它们是不可更改的,并且你不能给它们分配新的值。所以我写了一个演示,试图证明我认为是正确的,结果发现我完全是错的rong解释了这实际上是如何工作的。感谢您的澄清!字符串是不可变的,但您仍然可以将变量分配给新值。您能发布一个完整的代码示例来演示您遇到的问题吗?(如果您有,请参考上面格兰特的评论;您在哪里分配了
newValue
?显然这不是一个完整的程序;它不会按原样编译。)看起来你并没有真正尝试过这一点。抱歉,伙计们,我没有设置新值。我将其编辑为include.Hi Trebor--我想你误解了.net中不可变字符串的含义。你仍然可以为字符串变量分配新值--该变量不是只读的,也不是一次性初始化的。不可变性只是意味着1.E每当您为字符串变量指定一个新值时,就会在幕后分配一个新字符串,2.您不能只更改字符串中的一个字符,如newValue[2]='g';Chris和JMarsch,你们每个人都用我不理解的东西击中了它的头部。我在上一个任务中遇到了不变性问题,离开时认为它们是不可更改的,并且你不能给它们分配新的值。所以我写了一个演示,试图证明我认为是正确的,结果发现我完全是错的这实际上是如何工作的。谢谢你的澄清!+1。你可以跳过
包含
,只要做
如果(!prevSet.Add(str))return str;
请参见Danyluis,谢谢!您是正确的,我需要真正记住前面的所有值,这是一个比我想做的要好得多的解决方案。+1.您可以跳过
Contains
,只需执行
if(!prevSet.Add(str))return str;
请参阅Danyluis,谢谢!您说得对,我需要真正记住前面的所有值,这是一个比我想做的要好得多的解决方案。