2

私はList<T>T がプロパティ .Next を持っている場所を持っています。

リストには次のデータがあります。

One
Two
Three
Four
Five

私はこれを作りたい:

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

Five.Next は最後の要素として null

同じタイプの単一の変数に 1 つを割り当てる必要があります。

多くの ifs/while/hacks なしでこれを行うにはどうすればよいですか?

アップデート

結果変数は匿名型であってはなりません。

IEnumerable> や List> のような同じ型の戻り変数が必要です

また、クローズド ジェネリック型ではなくオープン ジェネリック型を使用していることも忘れていました。

誤報すみません!

4

4 に答える 4

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 に答える
1

LinkedList他の人がすでに提案したように、または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> のような同じ型の戻り変数が必要です。閉じた型ではなく、開いたジェネリック型を使用していることを忘れていました。

編集:これは、を使用した別のアプローチ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 に答える
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 に答える
0

LinkedList を作成できます

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

LinkedList.Firstを実行すると、必要に応じてNextが設定されたLinkedListNodeが取得されます。

于 2012-09-11T15:30:02.293 に答える