将一个列表与一个或多个列表进行比较:如何指定它们在第一个列表中的索引位置?在C#中

莱万特·博达

我有一些列表,例如:

List Vars<string>
List Units<string>

必须与以下内容进行比较:

List vars<string>
List units<string>

现在,问题是,我还必须存储这些差异所在的索引,例如:

Vars = 1, 2, 4, 5
vars = 1, 4, 2, 6

在这种情况下,我需要从第一个列表中存储5(必须将其更改为6)。

我确实找到了如何分辨它们之间是否存在差异的方法,但是我无法真正获得它们位于自己列表中的索引。

var unitsDifferences = Units.Except(unit).Union(unit.Except(Units)).ToList();

如上例所示,列表的排列顺序不同,有时第一个列表的第一个元素位于第二个列表的末尾,反之亦然,因此使用for或其他循环会非常慢,尤其是我必须研究数千个元素。

我对C#相当陌生,非常感谢您提供的任何帮助。

编辑:

        var firstDiff = TXTHandler.unit
            .Select((i, v) => new { Index = i, Value = v })
            .Where(p => !setVars.Contains(p.Value.ToString()))
            .Select(p => p.Index)
            .ToList(); //   
        Console.WriteLine(String.Join(",", setVars));

打印值,而不是它们的索引。

谢尔盖·卡里尼琴科(Sergey Kalinichenko)

您可以使用进行操作FirstOrDefault,如下所示:

// This is inefficient
var firstDiff = vars
    .Select((v, i) => new {Index = i, Value = v}) // Pair up values and indexes
    .FirstOrDefault(p => !Vars.Contains(p.Value)) // Pick first missing value
    ?.Index; // Select index using ?. because FirstOrDefault could return null

为了提高效率,请首先构建一个集合Vars这将使算法为O(n)而不是O(n 2):

var setVars = new HashSet<string>(Vars);
var firstDiff = vars
    .Select((v, i) => new {Index = i, Value = v})
    .FirstOrDefault(p => !setVars.Contains(p.Value))
    ?.Index; //           ^^^^^^^

如何获得所有差异的索引?

替换FirstOrDefaultWhereSelect

var setVars = new HashSet<string>(Vars);
var allDiffs = vars
    .Select((v, i) => new {Index = i, Value = v})
    .Where(p => !setVars.Contains(p.Value))
    .Select(p => p.Index)
    .ToList();

演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在迭代或循环时将最后一个索引与列表中的第一个索引进行比较

将列表的第一个元素与另一个列表进行比较

如何比较列表中字符串的第一个和最后一个索引

通过将第一个列表中的第一行项目与第二个列表中的项目进行比较来创建新列表

比较两个列表并根据 Linq C# 中的 Id 从第一个列表返回数据

元组列表到元组 C# 列表中的第一个元素列表

如何将列表列表隐藏到数据框中并使列表的第一个元素作为索引

将一个列表中的 8 个元素拆分为另一个 C# 的第一个元素

如何获取列表中的第一个值

如何从列表中删除第一个项目?

如何获取列表中的第一个标签?

如何访问列表中的第一个值?

如何比较一个元组列表中的第一个元组与另一个列表中的第一个元组,然后将第二个元组与第二个列表中的元组进行比较,依此类推?

列表/嵌套列表中的第一个元素

第一个孩子和列表中的列表

提取列表中列表的第一个元素

Python如何通过知道列表中列表的第一个元素来获取列表中列表的索引?

如何将值从一个列表移动到另一个列表,同时将其从第一个列表中删除

比较Linq中的CSV值列表,以将第二个列表中的CSV值与第一个列表中的任何值进行匹配

比较3个列表之间的值,并将第一个列表中的缺失值添加到其余2个列表中-C#

按Elm中的第一个索引对元组列表进行排序

我想将一个项目移到列表中的第一个索引。如何简化代码?

基于第一个元素在列表列表中对列表进行分组

如何在 R 中的第一个位置为列表的每个对象添加一个值

将每个第一个子列表与其余子列表进行比较,如果它们通过条件,则将列表中的第二个子列表分组

按第一个列表对列表进行排序

Python,第一个列表索引-上一个列表索引,然后打印

如何将列表中与第一个列表中的单词匹配的单词替换为与第二个列表中的第一个单词具有相同位置的单词?

通过比较第一个元素 Python 连接列表中的列表