首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用c#生成具有列表的对

使用c#生成具有列表的对
EN

Stack Overflow用户
提问于 2013-03-14 13:13:46
回答 3查看 222关注 0票数 0

基本上我有酒店的房间列表,比方说用户选择3个房间

第一间有两名成人的房间,

第二名:4名成人

第三名,6名成人。

好吧,当我将这个请求发送到XML服务时。它给我的房间与未对名单,所以我需要对这些房间的基础是酒店房间类型,是RO (房间),每一对元素应该有相同的房间类型,但每一个要求的房间,如上文所述。

因此,我想您现在已经清晰地看到了正在发生的事情:),占用率属性中的第二个值显示了成人的数量。我的数学不好,但我认为这是数学中的一套。

因此,我们总共有4个房间,其中我们有两个成年人的前2个房间(//1和//2),因此我们必须将这些房间与其他房间(4名成人和6名成年人)配对。

在这个场景中,我需要3对,如下所述

SB,仅限房间,1,2 ,供2名成人使用 SB,仅限房间,1,4 ,供4名成人使用 SB,仅限房间,1,6 适用于6名成人 DQ,仅限房间,1,2 为2成人 SB,仅限房间,1,4 ,供4名成人使用 SB,仅提供房间,为6名成人提供1,6 SB,早餐,为2名成人提供1,2 SB,早餐,为4名成人提供1,4 SB,早餐,为6名成人提供1,6

代码语言:javascript
复制
public class rr {
   public string roomType { get; set; }
   public string room { get; set; }
   public string occupancy { get; set; }        
}

List<rr> listOfOccupancy = new List<rr>();

listOfOccupancy.Add(new rr { roomType = "SB", room = "Room Only", occupancy = "1,2" }); //1
listOfOccupancy.Add(new rr { roomType = "DQ", room = "Room Only", occupancy = "1,2" }); //2
listOfOccupancy.Add(new rr { roomType = "SB", room = "Room Only", occupancy = "1,4" }); //3
listOfOccupancy.Add(new rr { roomType = "SB", room = "Room Only", occupancy = "1,6" }); //4 

listOfOccupancy.Add(new rr { roomType = "SB", room = "Breakfast", occupancy = "1,2" }); //5
listOfOccupancy.Add(new rr { roomType = "SB", room = "Breakfast", occupancy = "1,4" }); //6
listOfOccupancy.Add(new rr { roomType = "SB", room = "Breakfast", occupancy = "1,6" }); //7
EN

回答 3

Stack Overflow用户

发布于 2013-03-14 13:20:39

也许这会为你指明正确的方向:

代码语言:javascript
复制
    var x = listOfOccupancy
        .OrderByDescending(r => r.room)
        .ThenBy(r => r.occupancy)
        // Optional distinct using equality comparer
        //.Distinct(...)
        .ToList();

干杯,亚历克斯

编辑:这会产生:

代码语言:javascript
复制
RO, 1,2
RO, 1,2
RO, 1,4
RO, 1,6
AB, 1,2
AB, 1,2
AB, 1,4
AB, 1,6
票数 1
EN

Stack Overflow用户

发布于 2013-03-14 13:33:48

看上去你想把名单弄清楚,然后再加倍。见下面的代码:

代码语言:javascript
复制
var distinctList = listOfOccupancy.Select(l => new { l.room, l.occupancy }).Distinct();
var doubledList = distinctList.Concat(distinctList);
票数 0
EN

Stack Overflow用户

发布于 2013-03-14 13:37:13

我有一个解决方案,看起来有点复杂,但做你想做的事情:

代码语言:javascript
复制
var results = listOfOccupancy.GroupBy(rr => rr.room)
                             .Select(g => g.GroupBy(rr => rr.occupancy).SelectMany(g2 => g2.Select((rr, i) => new { rr, i })))
                             .SelectMany(g => g.Select(g2 => g2))
                             .OrderBy(e => e.rr.room)
                             .ThenBy(e => e.i)
                             .ThenBy(e => e.rr.occupancy)
                             .Select(e => e.rr)
                             .ToList();

它能做什么?首先,它根据room属性值对输入列表进行分组。对于每个组,它再次按occupancy分组,并为每个子组内的元素指定一个索引。之后,使用SelectMany对所有组进行分层处理。在这一点上,我们有一个带有roomoccupancyindex的匿名对象列表。经过适当的排序后,您的数据将得到正确的排序。

结果是一个具有以下顺序的列表:

代码语言:javascript
复制
AB 1,2
AB 1,4
AB 1,6
AB 1,2
RO 1,2
RO 1,4
RO 1,6
RO 1,2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15410302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档