http://blogs.wankuma.com/myugaru/archive/2008/03/06/126524.aspx のコードを示します。
・・・NyaRuRuさんのアレ(※)の影響がもろに出ています・・・
(※アレ→http://blogs.wankuma.com/myugaru/archive/2008/02/26/125044.aspx)
しかしまあ誰が組んでも同じになると思われます(と言って逃げます・・・汗
んーと、そろそろアレも言わなきゃいけないですねえ。面倒ですね色々と・・・。
以下のコードの使用に際してmyugaruの許可は必要ありません。また起こる現象の責任は全て使用者の自己責任で処理願います。myugaruは一切の責を負うつもりはございません。バグレポートなどは喜んでお受けしますが修正の義務も無いものといたします。 うはっ硬っ・・・(・ω・;A)ごめんねごめんねごめんね・・・。
拡張メソッドとは?→http://blogs.wankuma.com/myugaru/archive/2008/03/07/126694.aspx
using System;
using System.Collections.Generic;
namespace LinkedListEx
{
static class MyExtention
{
public static void ForEach<T>(
this LinkedList<T> list, Action<LinkedListNode<T>> action)
{
var node = list.First;
while (node != null) {
var next = node.Next;
action(node);
node = next;
if (node == list.First)
break;
}
}
public static LinkedListNode<T> Find<T>(
this LinkedList<T> list, Predicate<LinkedListNode<T>> predicate)
{
var node = list.First;
while (node != null) {
var next = node.Next;
if (predicate(node)) {
return node;
}
node = next;
if (node == list.First)
break;
}
return null;
}
public static LinkedListNode<T> FindLast<T>(
this LinkedList<T> list, Predicate<LinkedListNode<T>> predicate)
{
var node = list.Last;
while (node != null) {
var previous = node.Previous;
if (predicate(node)) {
return node;
}
node = previous;
if (node == list.Last)
break;
}
return null;
}
public static LinkedListNode<T> Add<T>(
this LinkedList<T> list, T value, Comparison<T> comparison)
{
var node = list.Find(n => comparison(value, n.Value) <= 0);
if (node != null) {
list.AddBefore(node, value);
node = node.Previous;
} else {
list.AddLast(value);
node = list.Last;
}
return node;
}
public static LinkedListNode<T> Add<T>(
this LinkedList<T> list, T value, IComparer<T> comparer)
{
return list.Add(value, comparer.Compare);
}
public static LinkedListNode<T> Add<T>(
this LinkedList<T> list, T value) where T : IComparer<T>
{
return list.Add(value, value.Compare);
}
public static LinkedListNode<T> ReSorting<T>(
this LinkedListNode<T> node, Comparison<T> comparison)
{
var list = node.List;
var value = node.Value;
list.Remove(node);
return list.Add(value, comparison);
}
public static LinkedListNode<T> ReSorting<T>(
this LinkedListNode<T> node, IComparer<T> comparer)
{
return node.ReSorting(comparer.Compare);
}
public static LinkedListNode<T> ReSorting<T>(
this LinkedListNode<T> node) where T : IComparer<T>
{
return node.ReSorting(node.Value.Compare);
}
}
}