.net 3.5-如何在c中的ipad地址数组中按升序排列所有ipad地址
本文关键字:地址 ipad 升序 排列 数组 net 中的 | 更新日期: 2023-09-27 18:00:19
如何在c中的ipad数组中升序排列所有ipad#我有一系列的ipad类
ipaddress[] device = new ipaddress[10];
它有不同的ip值,我想按升序排列
您可以使用版本技巧:
样本数据:
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
更新
你:它给出了这个错误"系统"。版本"不包含定义用于"分析"。我:那你至少不用了。NET框架4.0。版本作语法分析你:是的,我在用。NET框架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();
更新2
谢谢,但如果数组的任何成员为null,它就会停止。如果我们想使用包含一些null值的数组。我想最后订购空值。
然后使用此查询,该查询使用Byte[]
和Byte.MaxValue
作为空值:
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();
如果我是正确的,你可以这样做:
var list = new string[5];
list = list.OrderByDescending(x => x).ToArray();
使用其中一个数组。排序方法,数组。排序方法等。示例很简单:
Array.Sort(device, (a,b) => [compare here, return int] );
这应该有效:
Array.Sort(devices, (d1, d2) => d1.IPValue.CompareTo(d2.IPValue));
但最好使用List
而不是Array
您可以将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
,您可能需要为IP
字段实现IComparable
接口,以提高排序质量,即:获得11.100 > 2.100
而不是2.100 > 11.100