如何安排升序排列的ip地址陣列中的所有ipaddresses在C# 我有ip地址類的陣列如何安排的ip地址數組在C#升序排列所有ipaddresses
ipaddress[] device = new ipaddress[10];
它有不同的IP值,i想要將它們按升序排列
如何安排升序排列的ip地址陣列中的所有ipaddresses在C# 我有ip地址類的陣列如何安排的ip地址數組在C#升序排列所有ipaddresses
ipaddress[] device = new ipaddress[10];
它有不同的IP值,i想要將它們按升序排列
你可以使用版本帽子戲法:
抽樣數據:
IPAddress[] ips = new[]{
IPAddress.Parse("192.168.1.4"),
IPAddress.Parse("192.168.1.5"),
IPAddress.Parse("192.168.2.1"),
IPAddress.Parse("10.152.16.23"),
IPAddress.Parse("69.52.220.44"),
};
順序遞增:
var sortedIps = ips
.Select(ip => Version.Parse(ip.ToString()))
.OrderBy(v => v)
.Select(v => IPAddress.Parse(v.ToString()))
.ToArray();
結果:
{10.152.16.23} System.Net.IPAddress
{69.52.220.44} System.Net.IPAddress
{192.168.1.4} System.Net.IPAddress
{192.168.1.5} System.Net.IPAddress
{192.168.2.1} System.Net.IPAddress
更新
你:它給這個錯誤 'System.Version' 不包含一個定義爲 「解析」。我:那你至少不用.NET框架4.0。 Version.Parse 你:是的,我使用.NET framwork 3.5所以我需要什麼變化 呢?
那麼你可以使用IPAddress.GetAddressBytes
爲Enumerable.OrderBy
/ThenBy
:
sortedIps = ips
.Select(ip => new { IP = ip, Bytes = ip.GetAddressBytes() })
.OrderBy(x => x.Bytes[0]).ThenBy(x => x.Bytes[1]).ThenBy(x => x.Bytes[2]).ThenBy(x => x.Bytes[3])
.Select(x => x.IP)
.ToArray();
UPDATE2
謝謝,但它牛逼停止,如果陣列中的任何成員是null.if我們要 使用包含一些空值的數組。我想最後訂購空值。
然後使用此查詢,它使用與Byte.MaxValue
一個Byte[]
爲空值:
var sortedIps = ips
.Select(ip => new {
IP = ip,
Bytes = ip == null
? new[] { Byte.MaxValue, Byte.MaxValue, Byte.MaxValue, Byte.MaxValue }
: ip.GetAddressBytes()
})
.OrderBy(x => x.Bytes[0]).ThenBy(x => x.Bytes[1]).ThenBy(x => x.Bytes[2]).ThenBy(x => x.Bytes[3])
.Select(x => x.IP)
.ToArray();
您可以使用LINQ爲
using System.Linq;
ipaddress[] sortedDevice1 = device.OrderBy(d => d.IP).ToArray(); // assuming the ip address is saved in a field named 'IP'
ipaddress[] sortedDevice2 = device.OrderByDescending(d => d.IP).ToArray(); // if you need it sorted by descending order
如果您IP
字段不是string
,你可能想實現IComparable
接口,爲IP
領域,以提高分類質量,即:讓11.100 > 2.100
代替2.100 > 11.100
用途之一Array.Sort方法,其中包括Array.Sort Method。例子很簡單:
Array.Sort(device, (a,b) => [compare here, return int]);
這應該工作:
Array.Sort(devices, (d1, d2) => d1.IPValue.CompareTo(d2.IPValue));
但最好使用List
代替Array
顯示你的IP樣的和所需的順序。 – 2013-02-20 12:39:22