我有4个季节的阵列:Summer, Autumn, Winter, Spring
。我希望能够保持这种内在的顺序,但是将当前季节作为数组中的第一项。
因此,如果当前季节为Winter
,则结果为:Winter, Spring, Summer, Autumn
。
在我看来,这基本上涉及将数组视为“循环”,这样如果你从一开始就移动一个元素,它就会出现在结尾,反之亦然。我有一些丑陋的实现,但我希望有一些美好而干净的东西。
我用Ruby编写,但任何显示算法的语言(或伪代码)都没问题。
答案 0 :(得分:3)
简单的解决方案是将元素保留在 circular linked list 中,每当更改季节时,将指针放在存储列表头部的位置。
这将相当优雅且易于使用,如果您只处理4个元素 - 链表的性能在这里确实不是问题。
答案 1 :(得分:1)
在做了一些研究之后,我发现Ruby的数组有rotate方法,它可以完全满足需要:
base_order = ['Summer', 'Autumn', 'Winter', 'Spring']
sorted_order = base_order.rotate(base_order.index('Winter'))
# Yields ['Winter', 'Spring', 'Summer', 'Autumn']
还有一个版本#rotate!
,它也会改变基础数组。
答案 2 :(得分:0)
使用mod 4
访问阵列。你的数组看起来像[Summer, Autumn, Winter, Spring]
;假设当前季节为get(int index, int current)
,其中Summer映射为0,Autumn为1等,则创建一个函数index
,该函数在索引current
获取元素。
string get(int index, int current)
{ return array[ (current + index + 4) % 4 ];
}
这比循环列表解决方案更快更简单。如果当前季节为冬季(2),则get(1, 2)
将返回3,get(3, 2)
将返回1.