次のコードを使用して、Web API 経由で csv ファイルからアイテムのリストを取得しています。
private List<Item> items = new List<Item>();
public ItemRepository()
{
string filename = HttpRuntime.AppDomainAppPath + "App_Data\\items.csv";
var lines = File.ReadAllLines(filename).Skip(1).ToList();
for (int i = 0; i < lines.Count; i++)
{
var line = lines[i];
var columns = line.Split('$');
//get rid of newline characters in the middle of data lines
while (columns.Length < 9)
{
i += 1;
line = line.Replace("\n", " ") + lines[i];
columns = line.Split('$');
}
//Remove Starting and Trailing open quotes from fields
columns = columns.Select(c => { if (string.IsNullOrEmpty(c) == false) { return c.Substring(1, c.Length - 2); } return string.Empty; }).ToArray();
var temp = columns[5].Split('|', '>');
items.Add(new Item()
{
Id = int.Parse(columns[0]),
Name = temp[0],
Description = columns[2],
Photo = columns[7]
});
}
}
アイテム リストの Name 属性は、構造が次のような列から取得する必要があります。
Groups>Subgroup>item
したがってvar temp = columns[5].Split('|', '>');
、コードで ">" の前の列の最初の要素 (上記の場合はグループ) を取得するために使用します。そして、これはうまくいきます。
ただし、結果に多くの重複があります。これは、列の他の項目が次の可能性があるためです。
(これらは、私の csv 列 9 のエントリの一部です)
Groups>Subgroup2>item2
, Groups>Subgroup3>item4
,Groups>Subgroup4>item9
すべては で始まりますがGroups
、取得したいのはGroups
一度だけです。
そのまま、の長いリストを取得しGroups
ます。重複を停止するにはどうすればよいですか?
リスト内のアイテムがName
「グループ」で返された場合、その名前の他のアイテムが返されないようにしたいと考えています。このチェックを実行して実装するにはどうすればよいですか?