2

我有一个List<T>where T 有属性 .Next 的地方。

该列表包含以下数据:

One
Two
Three
Four
Five

我想做这个:

One.Next = Two;
Two.Next = Three;
Three.Next = Four;
Four.Next = Five;

五.Next 是 null 作为它的最后一个元素

一个应该分配给相同类型的单个变量。

如果没有很多 ifs/while/hacks 我怎么能做到这一点?

更新

结果变量不应是匿名类型。

我需要一个相同类型的返回变量,例如 IEnumerable> 或 List>

我也忘了提到我使用的是开放的泛型类型而不是封闭的泛型类型。

对不起,错误信息!

4

4 回答 4

1

您可以使用LinkedList其他人已经建议的 a 或ElementAtOrDefault

var result = list.Select((s,i) => new { This=s, Next=list.ElementAtOrDefault(i+1) });   
foreach(var x in result)
    Console.WriteLine("{0}.{1}",x.This,x.Next);

这是演示:http: //ideone.com/Qwiwc


结果变量不应是匿名类型。我需要一个与 IEnumerable> 或 List> 相同类型的返回变量,我还忘了提到我使用的是开放的泛型类型而不是封闭的泛型类型。

编辑:这是另一种使用 a 的方法IEnumerable<Tuple<T, T>>

public static IEnumerable<Tuple<TSource, TSource>> ToLinkedSequence<TSource>(this IEnumerable<TSource> input)
{
    return input.Select((x,i) => Tuple.Create(x, input.ElementAtOrDefault(i + 1)));
}

你将如何使用它:

var sequence = new[] { "One", "Two", "Three", "Four", "Five" };
var linkedSequence = sequence.ToLinkedSequence();
foreach (var x in linkedSequence)
    Console.WriteLine("{0}.{1}", x.Item1, x.Item2);

元组类

于 2012-09-11T15:35:57.130 回答
1
for(int i = 0;i < list.Count;++i)
    list[i].Next = i < list.Count - 1 ? list[i + 1] : null;
于 2012-09-11T15:30:15.093 回答
0

您可以创建一个 LinkedList

  List<string> s = new List<string> {"one", "two", "three", "four", "five"};
  LinkedList<string> ls = new LinkedList<string>(s);

如果你这样做LinkedList.First你会得到LinkedListNode有你想要的Next设置

于 2012-09-11T15:30:02.293 回答
0
public interface INextable<T>
{
  public T Next {get;set;}
}


List<MyClass> list = new List<MyClass>(); // Where MyClass implements INextable<MyClass>
var query = list.Zip(list.Skip(1), (a, b) => new
{
    First = a,
    Second = b
});

foreach (var item in query)
{
    item.First.Next = item.Second;
}
于 2012-09-11T15:31:28.643 回答