Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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_List - Fatal编程技术网

在C#列表中查找重复字符串的索引

在C#列表中查找重复字符串的索引,c#,arrays,list,C#,Arrays,List,我有一个字符串列表: ["String1"] ["String2"] ["String1"] ["String3"] ["String2"] ["String1"] 我需要在列表中搜索并找到“String1”的索引,并计算“String1”出现的次数。我已经复习过了,但是我对C#中这种类型的编码还不熟悉,我不清楚如何提取索引值,所以如果你能解释一下如何使用这个解决方案,那就太好了 另一个答案中的代码,我将在这里复制以供参考 var duplicates = data .Select((t,

我有一个字符串列表:

["String1"]
["String2"]
["String1"]
["String3"]
["String2"]
["String1"]

我需要在列表中搜索并找到“String1”的索引,并计算“String1”出现的次数。我已经复习过了,但是我对C#中这种类型的编码还不熟悉,我不清楚如何提取索引值,所以如果你能解释一下如何使用这个解决方案,那就太好了

另一个答案中的代码,我将在这里复制以供参考

var duplicates = data
  .Select((t,i) => new { Index = i, Text = t })
  .GroupBy(g => g.Text)
  .Where(g => g.Count() > 1);
返回的
IEnumerable
,其本身是匿名类型的
IEnumerable
。您可以从结果中获取索引,如下所示:

foreach(var group in duplicates)
{
    Console.WriteLine("Duplicates of {0}:", group.Key)
    foreach(var x in group)
    {
        Console.WriteLine("- Index {0}:", x.Index)
    }
}
但是,如果您只想获取索引列表,则可以使用扩展方法:

var duplicateIndexes = data
  .Select((t,i) => new { Index = i, Text = t })
  .GroupBy(g => g.Text)
  .Where(g => g.Count() > 1)
  .SelectMany(g => g, (g, x) => x.Index);

这将返回
int
IEnumerable

来自另一个答案的代码,我将在这里复制该代码以供参考

var duplicates = data
  .Select((t,i) => new { Index = i, Text = t })
  .GroupBy(g => g.Text)
  .Where(g => g.Count() > 1);
返回的
IEnumerable
,其本身是匿名类型的
IEnumerable
。您可以从结果中获取索引,如下所示:

foreach(var group in duplicates)
{
    Console.WriteLine("Duplicates of {0}:", group.Key)
    foreach(var x in group)
    {
        Console.WriteLine("- Index {0}:", x.Index)
    }
}
但是,如果您只想获取索引列表,则可以使用扩展方法:

var duplicateIndexes = data
  .Select((t,i) => new { Index = i, Text = t })
  .GroupBy(g => g.Text)
  .Where(g => g.Count() > 1)
  .SelectMany(g => g, (g, x) => x.Index);

这将返回一个
int
IEnumerable

首先从答案中理解代码(请参阅下面的注释):

让我们修改它以适应我们的目的:

// Produce an enumeration of Indexes of "String1"
var allString1Indexes = data
    // First, add the index to the value by using Select with an anonymous type
    .Select((t,i) => new { Index = i, Text = t })
    // Keep only the "String1" items
    .Where(p => p.Text == "String1")
    // Use only indexes
    .Select(p => p.Index);
您现在可以迭代结果,并打印
“String1”
的所有索引:


从理解答案中的代码开始(见下面我的评论):

让我们修改它以适应我们的目的:

// Produce an enumeration of Indexes of "String1"
var allString1Indexes = data
    // First, add the index to the value by using Select with an anonymous type
    .Select((t,i) => new { Index = i, Text = t })
    // Keep only the "String1" items
    .Where(p => p.Text == "String1")
    // Use only indexes
    .Select(p => p.Index);
您现在可以迭代结果,并打印
“String1”
的所有索引:


您可以使用
ToDictionary
方法获取
字典


在每个
键下
都有一个索引列表,其中字符串实际出现在源代码列表中。

您可以使用
ToDictionary
方法获取
字典


在每个
键下都有一个索引列表,其中字符串实际出现在源代码列表中。

@Daniel。OP实际上在他自己的问题中提到了这个问题,因此显然需要比它提供的更多的细节。@请在这里标记-作为您的问题。@mark您真的只需要
“String1”
的标记,还是要所有字符串的标记?如果您只关心
“String1”
,那么使用基本循环有一个更简单的解决方案。@Daniel。OP实际上在他自己的问题中提到了这个问题,因此显然需要比它提供的更多的细节。@请在这里标记-作为您的问题。@mark您真的只需要
“String1”
的标记,还是要所有字符串的标记?如果您只关心
“String1”
,那么有一个更简单的解决方案,使用基本循环。为什么要投否决票?如果我的答案有错误,我很乐意纠正。它抄袭了另一个问题。@DanielA.White OP的问题是为了更好地理解该代码。我把它复制到这里是为了更好的上下文(因为OP没有把它包括在实际问题中)。这对我来说似乎相当合理,因为我确实提供了一个解决OP具体问题的解释。您希望我只是链接到答案(将来可能会被编辑,破坏这个上下文),还是编辑问题以包含OP所困惑的代码?为什么要投否决票?如果我的答案有错误,我很乐意纠正。它抄袭了另一个问题。@DanielA.White OP的问题是为了更好地理解该代码。我把它复制到这里是为了更好的上下文(因为OP没有把它包括在实际问题中)。这对我来说似乎相当合理,因为我确实提供了一个解决OP具体问题的解释。您希望我只是链接到答案(将来可能会被编辑,破坏这个上下文),还是编辑问题以包含OP所困惑的代码?