2016-12-05 3 views
0

Iミリメートルの2リストをマージ:C#が、このモデルを使用してIP

public class IPList 
{ 
    public List<string> websites { get; set; } 
    public int total_websites { get; set; } 
    public string ip { get; set; } 
} 

リストは次の値があります。

[{ 
    "websites": ["test1.com", "test2.com", "test3.com", "test4.com"], 
    "total_websites": 4, 
    "ip": "104.130.124.96" 
}, { 
    "websites": ["test5.com"], 
    "total_websites": 1, 
    "ip": "104.130.124.80" 
}, { 
    "websites": ["test6.com"], 
    "total_websites": 1, 
    "ip": "104.130.124.70" 
}] 

は私が範囲内のすべてのIPを持つ新しいリストを持っていると思いますが104.130.124.x104.130.124.0 to 104.130.124.255)。私がやった何

List<IPList> NewIPList = new List<IPList>(); 
for (int i = 0; i < 255; i++) 
{ 
    string TempIP = "104.130.124." + i; 
    IPListTake10 TempIpList = IPList.Where(p => p.ip == TempIP).FirstOrDefault(); 
    if (TempIpList != null) 
    { 
     NewIPList.Add(new IPList{ ip = TempIP, total_websites = TempIpList.total_websites, websites = TempIpList.websites }); 
    } 
    else 
    { 
     NewIPList.Add(new IPList{ ip = TempIP, total_websites = 0}); 
    } 
} 

はそれを行うには良い方法はありますか?これらのいずれかの方法を使用して、たぶん

http://alicebobandmallory.com/articles/2012/10/18/merge-collections-without-duplicates-in-c

  • リストとLINQは
  • 辞書のことができます
  • HashSetのとされたIEqualityComparer
  • LINQ連合(EU)とされたIEqualityComparer
+0

なぜ、 '' 'NewIPList = IPList.Where(x => x.ip.StartsWith(" 104.130.124。 "))ですか?ToList()' ''? – tym32167

+0

最初に見つけられることは、total_websitesの設定者を削除し、ゲッターでウェブサイトを使用することです。 –

+0

'Ip'プロパティに' String'の代わりに 'IPAddress'を使わないのはなぜですか? –

答えて

2

をマージマージ以下を試してください

var IPList = new List<IPList>() { new IPList() {ip="104.130.124.10", total_websites=10}}; 

var NewIPList = Enumerable.Range(0, 256) 
     .Select(x => $"104.130.124.{x}") 
     .Select(x => IPList.FirstOrDefault(z => z.ip == x) ?? new IPList() {ip=x, total_websites=0}) 
     .ToList(); 
+0

ありがとう、私の解決策よりも良く見える! – Yanga

関連する問題