Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如果按记录中的数字对记录进行排序,但某些记录具有相同的数字,则顺序不是gauranteed,而是不应';这不是随机的吗?_Ruby On Rails_Sorting_Deterministic_Random - Fatal编程技术网

Ruby on rails 如果按记录中的数字对记录进行排序,但某些记录具有相同的数字,则顺序不是gauranteed,而是不应';这不是随机的吗?

Ruby on rails 如果按记录中的数字对记录进行排序,但某些记录具有相同的数字,则顺序不是gauranteed,而是不应';这不是随机的吗?,ruby-on-rails,sorting,deterministic,random,Ruby On Rails,Sorting,Deterministic,Random,假设我们按照记录中的数字对一些记录进行排序: Name Number_of_Language_Known John 3 Mary 2 Peter 3 Mike 1 ... 如果我们不按名称进行排序,那么John和Peter的顺序就不能保证,但如果记录从未更改,那么顺序就不应该是随机的?我认为这在大多数环境中都应该是正确的(也就是说,没有其他改变,排序是两次完成的) 也就是说,如果我们把它分类一次,它就不会是约翰之前的彼得,第二次,约翰之前的彼得 这是因为在Ruby on Rails环境

假设我们按照记录中的数字对一些记录进行排序:

Name  Number_of_Language_Known
John  3
Mary  2
Peter 3
Mike  1
...
如果我们不按
名称
进行排序,那么John和Peter的顺序就不能保证,但如果记录从未更改,那么顺序就不应该是随机的?我认为这在大多数环境中都应该是正确的(也就是说,没有其他改变,排序是两次完成的)

也就是说,如果我们把它分类一次,它就不会是约翰之前的彼得,第二次,约翰之前的彼得

这是因为在Ruby on Rails环境中,如果记录从DB中提取,然后通过Ruby函数排序,并作为原始页面内容打印,则顺序是一种方式,但如果随后通过AJAX请求数据,则排序后的数组元素可以具有不同的顺序,对于该数字字段中具有相同数字的记录,这似乎很奇怪



更新:如果数据来自数据库,那么在获取记录时,数据库可能具有不可预测的顺序。但是如果记录首先是按主ID排序的呢?另外,如果数据已经在数据结构中,我不知道有哪种常见的排序算法每次都会产生不同的排序顺序。也就是说,顺序不保证,但不是随机的。

不保证”意味着它可以随时更改(取决于当前的内存布局、垃圾收集器、时间等)。如果您需要另一个属性的排序顺序保持稳定,则必须按这两个属性排序(按id,然后按名称-在您的情况下)

不保证意味着它可以随时更改(取决于当前内存布局、垃圾收集器、时间等),如果您需要另一个属性的排序顺序保持稳定,则必须按两个属性对其进行排序(按id,然后按名称-在您的情况下)

假设这些值来自活动记录模型,排序来自数据库本身。不同的数据库以不同的方式处理排序,因此您可能需要检查特定数据库的文档

假设这些值来自活动记录模型,则排序来自数据库本身。不同的数据库以不同的方式处理排序,因此您可能需要检查特定数据库的文档

你的实际问题是什么?你的实际问题是什么?在这种情况下,数据来自数据库。。。但是如果数据不是来自数据库呢?我知道的大多数排序算法不会产生随机结果。在订单中不能保证,但订单不会每次都不一样。而且,如果名称有时甚至可以相同呢?然后,我想您需要按照第三个标准按主IDSuppose进行排序,例如,您有一个称为“列表”的通用结构来保存数据。假设此列表在封面下实现,一个数据结构达到某个记录计数,然后在该计数之上实现另一个结构。NET的HybridDictionary就是一个例子。这些结构中的每一个都可以以不同的方式处理未定义的排序并产生不同的结果(我不是说HybridDictionary可以做到这一点——这只是一个例子)@Jian,在可能重复的情况下,通过很多很多字段进行排序以消除歧义并不罕见。在我的例子中,我通常按重要的一两个字段进行排序,然后按主键或日志日期进行排序,以使其定义良好。@Jian
我所知道的大多数排序算法不会产生随机结果,但排序结果可能会因未排序集合的初始(dis)顺序而异。对于列表
L
s1=sort(L)
s2=sort(sort(L))
在有联系时肯定会产生不同的顺序。在这种情况下,数据来自数据库。。。但是如果数据不是来自数据库呢?我知道的大多数排序算法不会产生随机结果。在订单中不能保证,但订单不会每次都不一样。而且,如果名称有时甚至可以相同呢?然后,我想您需要按照第三个标准按主IDSuppose进行排序,例如,您有一个称为“列表”的通用结构来保存数据。假设此列表在封面下实现,一个数据结构达到某个记录计数,然后在该计数之上实现另一个结构。NET的HybridDictionary就是一个例子。这些结构中的每一个都可以以不同的方式处理未定义的排序并产生不同的结果(我不是说HybridDictionary可以做到这一点——这只是一个例子)@Jian,在可能重复的情况下,通过很多很多字段进行排序以消除歧义并不罕见。在我的例子中,我通常按重要的一两个字段进行排序,然后按主键或日志日期进行排序,以使其定义良好。@Jian
我所知道的大多数排序算法不会产生随机结果,但排序结果可能会因未排序集合的初始(dis)顺序而异。对于列表
L
s1=sort(L)
s2=sort(sort(L))
在有联系时肯定会产生不同的顺序。当索引或数据量发生变化时,这会从数据库中咬你一口。当没有请求排序时,db将以任何最快的方法返回它。当索引或卷更改时,“最快的”也可能更改为新索引。新索引中的数据可能有不同的顺序,因此会得到不同的结果。我认为答案是:从数据库中获取数据后进行排序不会产生随机顺序。随机性来自数据库以可能随机的顺序返回记录。当索引或数据量发生变化时,这种情况可能会对数据库造成影响。当没有请求排序时,db将以任何最快的方法返回它。当索引或卷更改时,“最快的”也可能更改为新索引。新的索引可能以不同的方式提供数据