根据元组中的第3项过滤元组

时间:2014-03-17 08:44:40

标签: c# list filter tuples

我需要打印一个使用美元作为网络服务货币的国家/地区列表。 数据来自一个名为country services的类,它包含这个元组:

public static IEnumerable<Tuple<string, string, string, string>> GetCountryData()
{
    var countryService = new CountryServiceProxy.country();
    var xmlStringResult = countryService.GetCurrencies();

    var result = new List<Tuple<string, string, string, string>>();

    var xPathDoc = new XPathDocument(new XmlTextReader(new StringReader(xmlStringResult)));
    var navigator = xPathDoc.CreateNavigator();
    var nodes = navigator.Select("//Table");
    var nodeNames = new[] {"Name", "CountryCode", "Currency", "CurrencyCode"};

    while (nodes.MoveNext())
    {
        var nodeValues = new[] {string.Empty, string.Empty, string.Empty, string.Empty};
        for (var i = 0; i < nodeNames.Length; i++)
        {
            var node = nodes.Current.SelectSingleNode(nodeNames[i]);
            if (node != null)
            {
                nodeValues[i] = node.Value;
            }
        }

        result.Add(new Tuple<string, string, string, string>(nodeValues[0], nodeValues[1], nodeValues[2], nodeValues[3]));

    }

    return result;
}

我需要调用该方法并使用它打印出使用美元的国家/地区的列表:

private static IEnumerable<Country> Excercise4()
{
    //     var data = CountryService.GetCountryData().Where(x => x.Item3.Contains("Dollar"));
    //    ////var data = CountryService.GetCountryData().Where(x => x.Item3 == "Dollar");
    //    //Console.WriteLine(data);

    return new List<Country>
    {
         new Country("da", "C1", "$", "Dollar"),
         new Country("Country2", "C3", "$", "Dollar")
    };
}

到目前为止,我的方法看起来像这样。我似乎无法弄清楚如何打印出元组,之前没有使用过元组。

我的写法如下:

ConsoleHelper.PrintCountryResults(Excercise4(), "Return a list of Country objects who's currency is Dollar");
ConsoleHelper.Pause(PauseMessage);

并且控制台助手类看起来像这样:

public static void PrintCountryResults(IEnumerable<Country> results, string title)
{
    PrintHeader(title);
    foreach (var result in results)
    {
        Console.WriteLine("{0, -30}{1, -5}{2, -15}{3, -5}", result.CountryName, result.CountryCode, result.CurrencyName, result.CurrencyCode);
    }
}

任何帮助都会受到赞赏,因为我说在第一次尝试之前没有使用过元组。 感谢名单

1 个答案:

答案 0 :(得分:0)

您可以通过引用ItemX属性来过滤元组的属性,其中X是您感兴趣的属性的从1开始的索引。在这种情况下,如果货币是第三项,则过滤元组看起来像

var countriesUsingDollarAsACurrency = GetCountryData().Where(tuple => tuple.Item3 == "Dollar");