从当前季节开始对一系列季节进行排序
Sort an array of seasons, starting with the current season
我有一个包含 4 个季节的数组:Summer, Autumn, Winter, Spring
。我希望能够保持这种内在顺序,但将当前季节设为数组中的第一项。
因此,如果当前季节是 Winter
,结果将是:Winter, Spring, Summer, Autumn
。
在我看来,这基本上涉及将数组视为 'loop',因此如果您将元素从开头移开,它就会出现在末尾,反之亦然。我对此有一些丑陋的实现,但我希望有一些漂亮干净的东西。
我正在用 Ruby 编写,但任何显示该算法的语言(或伪代码)都可以。
简单的解决方案是将元素保留在 circular linked list 中,并且每当季节发生变化时,将存储列表头部的指针向前移动。
这将相当优雅且易于使用,如果您只处理 4 个元素 - 链表的性能在这里真的不是问题。
使用mod 4
访问数组。你的数组看起来像 [Summer, Autumn, Winter, Spring]
;创建一个函数 get(int index, int current)
获取索引 index
处的元素,假设当前季节是 current
,其中夏季映射到 0,秋季映射到 1,等等
string get(int index, int current)
{ return array[ (current + index + 4) % 4 ];
}
这比循环列表解决方案更快、更简单。如果当前季节是冬季 (2),则 get(1, 2)
将 return 3,get(3, 2)
将 return 1。
经过一些研究,我发现 Ruby 的 Array 有 rotate 方法,这正是需要的:
base_order = ['Summer', 'Autumn', 'Winter', 'Spring']
sorted_order = base_order.rotate(base_order.index('Winter'))
# Yields ['Winter', 'Spring', 'Summer', 'Autumn']
有一个 banged 版本 #rotate!
也改变了基本数组。
我有一个包含 4 个季节的数组:Summer, Autumn, Winter, Spring
。我希望能够保持这种内在顺序,但将当前季节设为数组中的第一项。
因此,如果当前季节是 Winter
,结果将是:Winter, Spring, Summer, Autumn
。
在我看来,这基本上涉及将数组视为 'loop',因此如果您将元素从开头移开,它就会出现在末尾,反之亦然。我对此有一些丑陋的实现,但我希望有一些漂亮干净的东西。
我正在用 Ruby 编写,但任何显示该算法的语言(或伪代码)都可以。
简单的解决方案是将元素保留在 circular linked list 中,并且每当季节发生变化时,将存储列表头部的指针向前移动。
这将相当优雅且易于使用,如果您只处理 4 个元素 - 链表的性能在这里真的不是问题。
使用mod 4
访问数组。你的数组看起来像 [Summer, Autumn, Winter, Spring]
;创建一个函数 get(int index, int current)
获取索引 index
处的元素,假设当前季节是 current
,其中夏季映射到 0,秋季映射到 1,等等
string get(int index, int current)
{ return array[ (current + index + 4) % 4 ];
}
这比循环列表解决方案更快、更简单。如果当前季节是冬季 (2),则 get(1, 2)
将 return 3,get(3, 2)
将 return 1。
经过一些研究,我发现 Ruby 的 Array 有 rotate 方法,这正是需要的:
base_order = ['Summer', 'Autumn', 'Winter', 'Spring']
sorted_order = base_order.rotate(base_order.index('Winter'))
# Yields ['Winter', 'Spring', 'Summer', 'Autumn']
有一个 banged 版本 #rotate!
也改变了基本数组。