c# - 将列表中的每个元素与其他元素进行比较

标签 c# linq list combinations

编写一个循环遍历列表中每个 2 元素组合的控制结构的最佳方法是什么?

例子:

{0,1,2}

我想让一段代码运行三次,每次运行一次:

{0,1}
{1,2}
{0,2}

我尝试了以下方法

foreach (int i in input)
{
    foreach (int j in input.Where(o => o != i))
    {
        //Execute code
    }
}

但是,当一个列表有两个相同的元素时,这将不起作用。与

{0,2,0}

我仍然想比较元素 00。该值无关紧要。

最佳答案

听起来你可能想要这样的东西:

for (int i = 0; i < list.Count - 1; i++)
{
    for (int j = i + 1; j < list.Count; j++)
    {
        // Use list[i] and list[j]
    }
}

您绝对可以使用 LINQ 做到这一点:

var pairs = from i in Enumerable.Range(0, list.Count - 1)
            from j in Enumerable.Range(i + 1, list.Count - i - 1)
            select Tuple.Create(list[i], list[j]);

虽然我不确定是否更清楚...

编辑:另一种效率较低但可能更清晰的替代方案:

var pairs = from i in Enumerable.Range(0, list.Count - 1)
            let x = list[i]
            from y in list.Skip(i + 1)
            select Tuple.Create(x, y);

关于c# - 将列表中的每个元素与其他元素进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17031771/

相关文章:

c# - 使用成员访问 lambda 表达式参数化 LINQ to SQL 谓词

list - 如何将函数仅映射到列表中的某些元素?

Windows 手机上的 Linq

c - 如何将链表从一个文件传递到同一项目中的另一个文件?

Java - 将元素添加到列表中时出错

c# - 将 UI 字符串放入资源中

c# - 您必须使用支持并启用JavaScript的浏览器-C#

c# - 无法启动带有 mod_mono 的 apache2。错误 : undefined symbol: unixd_config

c# - SharePoint 列表项权限

c# - 避免在 LINQ orderby 中被零除