我問下面的問題。我得到了答案。如何使用LINQ:如果有幾個最小值和最大值,只刪除列表中的一個最小值和最大值
How to use a LINQ in order to remove Min and Max value in List
不過,我有這樣的情況的問題有幾個分和列表最大值。 我想要使用LINQ表達式來刪除列表中只有一個最小值和最大值。
代碼片斷:
namespace ConsoleApplication_lamdaTest
{
public struct TValue
{
public double x, y;
public double value { get { return Math.Sqrt(x * x + y * y); } }
}
class Program
{
static void Main(string[] args)
{
List<TValue> temp = new List<TValue> {
new TValue { x = 1, y =2 },
new TValue { x = 3, y =4 },
new TValue { x = 4, y =3 },
new TValue { x = 3, y =1 },
new TValue { x = 2, y =3 },
new TValue { x = 1, y =4 },
new TValue { x = 1, y =2 },
new TValue { x = 1, y =2 }
};
foreach(TValue item in temp)
Console.WriteLine(item.value.ToString());
var newValue = from pair in temp
where pair.value < temp.Max(m => m.value) && pair.value > temp.Min(m => m.value)
select pair;
foreach (TValue item in newValue)
Console.WriteLine(item.value.ToString());
Console.ReadKey();
}
}
}
輸出;
2.23606797749979
5
5
3.16227766016838
3.60555127546399
4.12310562561766
2.23606797749979
2.23606797749979
-------------------
3.16227766016838
3.60555127546399
4.12310562561766
但是,我想得到如下的輸出;
2.23606797749979
5
5
3.16227766016838
3.60555127546399
4.12310562561766
2.23606797749979
2.23606797749979
-------------------
5
3.16227766016838
3.60555127546399
4.12310562561766
2.23606797749979
2.23606797749979
我在想幾個步驟來解決這個問題。使用LINQ:可以使用LINQ嗎?
1. Sorting
2. Remove First and Last index
代碼片段:任何幫助?
var newSortedValue = from pair in temp
orderby pair.value descending
where pair = temp.RemoveAt(0) && pair = temp.RemoveAt(temp.Count()-1)
select pair;
不要以爲只有Linq才能做任何事情。 – DavidG 2014-10-30 11:06:59
在您的有序列表中,您希望[跳過](http://msdn.microsoft.com/library/bb357513.aspx)第一個元素,然後[take](http://msdn.microsoft.com/library/ bb300906.aspx)除了最後一個元素之外的所有東西,對吧?所以'orderedList.Skip(1).Take(orderedList.Count() - 2)'應該做的。 – Corak 2014-10-30 11:10:04