【问题标题】:Transform collection of objects to a collection of tuples将对象集合转换为元组集合
【发布时间】:2015-09-24 03:19:56
【问题描述】:

我有一个对象集合。我确保它有均匀数量的对象。

Object1
Object2
Object3
Object4
Object5
Object6

我需要将集合转换为元组,像这样

Tuple(Object1, Object2),
Tuple(Object3, Object4),
Tuple(Object5, Object6)

我一直在尝试为它想出一个扩展方法,但我没有想出任何东西。

public static IEnumerable<Tuple<T, T>> ToTuples(this IEnumerable<T> objects)
{
    // what do I do here?
}

【问题讨论】:

  • 你做了哪些尝试?他们没有工作怎么办?
  • 就像我说的,我自己还没有想出如何实现这一目标。我知道如何使用 LINQ 扩展方法,并且我主要考虑使用这些方法。
  • @Servy,我认为 OP 已经非常清楚地解释了他们迄今为止在这个场合所做的尝试。 1.他们可以手动创建元组; 2. 他们探索了扩展方法的想法,但并不真正知道如何以这种方式解决它。
  • @DavidArno 他特别说他一直在尝试创建一个实现,所以人们会假设如果他一直在尝试某些东西,他将一无所有,因为如果是这样的话,那就意味着他 实际上并没有尝试过。他可能一无所有,但他一无所有。

标签: c# tuples extension-methods ienumerable


【解决方案1】:

可能是这样的吗?

  public static IEnumerable<Tuple<T, T>> ToTuples<T>(this IEnumerable<T> objects)
  {
     IEnumerator<T> enumerator = objects.GetEnumerator();
     while (enumerator.MoveNext())
     {
        T object1 = enumerator.Current;
        if (enumerator.MoveNext())
        {
           yield return Tuple.Create(object1, enumerator.Current);
        }
     }
  }

【讨论】:

  • 如果序列是奇数长度,这只是跳过最后一个元素(没有具体说明 OP 应该是什么行为),如果 objects == null 会抛出 NRE。
  • 点对点(即这与我开始写的内容几乎相同,然后你的答案弹出)。值得扩展答案来解释它是如何通过 IMO 工作的。
  • @Mephy:你说得对,如果他知道在这些情况下他想做什么,我相信 OP 可以根据需要进行调整。
  • @Mephy 我确保只传递偶数长度的集合。我只在这个场合需要这个,如果以后需要的话我会调整它:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多