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,是的,我把所有的东西都运到了东欧,那里非常短缺。