Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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
Arrays 数组查找相同元素的数目_Arrays_Ruby - Fatal编程技术网

Arrays 数组查找相同元素的数目

Arrays 数组查找相同元素的数目,arrays,ruby,Arrays,Ruby,例如,我有这样一个数组: ["a","a","a","a","b","c","d","a","a","a"] #Expected result = 4 在我的例子中,“a”,在同一个元素变为不同的值之前,如何找到它的编号 提前谢谢 这是我能想到的最像红宝石的方法 array = ["a","a","a","a","b","c","d","a","a","a"] array.chunk{|char| char}.map{|char, a| a.size if char == "a"}.firs

例如,我有这样一个数组:

["a","a","a","a","b","c","d","a","a","a"] #Expected result = 4
在我的例子中,
“a”
,在同一个元素变为不同的值之前,如何找到它的编号


提前谢谢

这是我能想到的最像红宝石的方法

array = ["a","a","a","a","b","c","d","a","a","a"]

array.chunk{|char| char}.map{|char, a| a.size if char == "a"}.first
list.drop_while { |letter| letter != letter_to_find }.take_while { |letter| letter == letter_to_find }.count
这样做的目的是删除开头的字母,直到找到你想要的字母,然后数一数你想要的字母,直到找到一个不是你的字母

以你为例,你会这样做

["a","a","a","a","b","c","d","a","a","a"].drop_while { |letter| letter != "a" }.take_while { |letter| letter == "a" }.count

你的例子不仅需要
take_while
,而且如果你想要的字母前面有字母,就需要
drop_while

这是我能想到的最简单的方法

list.drop_while { |letter| letter != letter_to_find }.take_while { |letter| letter == letter_to_find }.count
letters = ["a","a","a","a","b","c","d","a","a","a"]
letters.take_while { |letter| letter == letters.first }.count
 => 4 
这样做的目的是删除开头的字母,直到找到你想要的字母,然后数一数你想要的字母,直到找到一个不是你的字母

以你为例,你会这样做

["a","a","a","a","b","c","d","a","a","a"].drop_while { |letter| letter != "a" }.take_while { |letter| letter == "a" }.count
对于您的特定示例,不仅需要
take_while
,而且如果您想要的字母前面有字母,则需要
drop_while

letters = ["a","a","a","a","b","c","d","a","a","a"]
letters.take_while { |letter| letter == letters.first }.count
 => 4 
如果您只关心第一个值,无论它是什么:

p array.slice_when(&:!=).first.size #=> 4

# same as array.slice_when{|x,y| x != y }.first.size #=> 4
如果需要查找特定值:

p array.slice_when(&:!=).find{|x| x.first == 'b' }.size #=> 1
或许:

p array.slice_when(&:!=).to_a.assoc('a').size #=> 4
如果您只关心第一个值,无论它是什么:

p array.slice_when(&:!=).first.size #=> 4

# same as array.slice_when{|x,y| x != y }.first.size #=> 4
如果需要查找特定值:

p array.slice_when(&:!=).find{|x| x.first == 'b' }.size #=> 1
或许:

p array.slice_when(&:!=).to_a.assoc('a').size #=> 4


维护2个指针(prev和current),并在数组中迭代比较这两个指针。如果数组是
arr=[“b”、“b”、“a”、“a”、“b”、“a”]
,并且要计算
“a”
的第一次运行,则答案将是
3
。对的如果是这样的话,最好阵列不是以
“a”
开头,因为这会导致混淆。顺便说一句,当你给出一个例子时,给每个输入对象分配一个变量(例如,
arr=[“a”,“a”…
),这样读者就可以在答案和注释中引用变量,而不必定义它。维护2个指针(prev和current)并在数组中迭代比较这两个指针。如果你的数组是
arr=[“b”,“b”、“a”、“a”、“a”、“b”、“a”]
和第一次运行的
“a”
,答案将是
3
。正确吗?如果是这样,数组最好不要以
“a”
开头,因为这会导致混淆。顺便说一句,在给出示例时,为每个输入对象分配一个变量(例如
arr=[“a”、“a”)“…
),以便读者可以在答案和注释中引用变量,而无需对其进行定义。谢谢,但我的预期结果是“4”,因为它将只计算前四个“a”,直到它变为“b”。如果向其中添加不同的字母,计数将是5而不是4。这只是巧合的4,因为t中有四个唯一的字母列表。是否要查找给定元素的计数?例如“a”意思是,它应该返回7?…你没有读过这个问题吗?我不想听起来很粗鲁,但这个问题显然是在问连续字符的计数。@Makoto现在知道了。。谢谢,但我的预期结果是“4”,因为它只会计算前四个“a”,直到它变为“b”。如果你添加不同的let除此之外,计数将是5而不是4。由于列表中有四个唯一的字母,所以它只是巧合的4。是否要查找给定元素的计数?例如“a”意思是,它应该返回7?…你没有读过这个问题吗?我不想听起来很粗鲁,但这个问题显然是在问连续字符的计数。@Makoto现在知道了。。谢谢。我想你可能误解了这个问题。我的理解是,如果要匹配的值是
“b”
,计数为1。我想你可能误解了这个问题。我的理解是,如果要匹配的值是
“b”
,计数为1。您的信笺店元音用完了吗-P@Jörg,是的,我把所有的东西都运到了东欧,那里非常短缺。你们的信笺店元音用完了吗-P@Jörg,是的,我把所有的东西都运到了东欧,那里非常短缺。