我有两个字符串,我把它们做成一个数组来排序,然后再转换回一个字符串,但是,在我的response. body的测试中,给定的字符串排序不同,我有一个方法,它接受两个字符串,从两个字符串中移除头,合并数组并排序,但是得到不同的结果,我怎样才能得到下面response.body
字符串的期望结果
string1 = "Category Name,Code,Enabled?,Category Hidden?\nPRESENT AVAIALBLE,PRESENT AVAILABLE,No,No,\nBUG AVAILABLE,BUG,No,No,\nBUG,BUG,No,No,\nPRESENT,PRESENT,No,No\n"
string2 = "Category Name,Code,Enabled?,Category Hidden?\nBUG,BUG,No,No,\nBUG AVAILABLE,BUG,No,No,\nEXAMPLE 1,EXAMPLE 1,Yes,No,\nEXAMPLE 2,EXAMPLE 2,Yes,No,\nPRESENT AVAIALBLE,PRESENT AVAILABLE,No,No,\nPRESENT,PRESENT,No,No\n"
在插入头文件"Category Name,Code,Enabled?,Category Hidden?"
之前,如何将数组排序为respons.body字符串
响应主体字符串
"Category Name,Code,Enabled?,Category Hidden?
BUG,BUG,No,No,
BUG AVAILABLE,BUG,No,No,
EXAMPLE 1,EXAMPLE 1,No,No,
EXAMPLE 2,EXAMPLE 2,Yes,No,
PRESENT,PRESENT,No,No"
PRESENT AVAIALBLE,PRESENT AVAILABLE,No,No"
我的方法输出
"Category Name,Code,Enabled?,Category Hidden?
BUG AVAILABLE,BUG,No,No,
BUG,BUG,No,No,
EXAMPLE 1,EXAMPLE 1,No,No,
EXAMPLE 2,EXAMPLE 2,Yes,No,
PRESENT AVAIALBLE,PRESENT AVAILABLE,No,No,
PRESENT,PRESENT,No,No"
我编写的方法
def merge(string1, string2)
string1 = string1.split("\n") # Split into array.
headers = string1.first # Get headers.
string1.shift # Remove headers.
string2 = string2.split("\n")[1..-1] # Remove headers.
final = (string1 + string2).sort.unshift(headers).join("\n") + "\n" # Create merged sorted string.
end
期望的结果
"Category Name,Code,Enabled?,Category Hidden?
BUG,BUG,No,No,
BUG AVAILABLE,BUG,No,No,
EXAMPLE 1,EXAMPLE 1,No,No,
EXAMPLE 2,EXAMPLE 2,Yes,No,
PRESENT,PRESENT,No,No"
PRESENT AVAIALBLE,PRESENT AVAILABLE,No,No"
1条答案
按热度按时间vptzau2j1#
这里有三种方法。
我假设您有两个字符串:
然后
所以
以及
所以
然后我们就可以计算出所需的字符串。
其在显示时如下所示。
请参见数组#concat、数组#zip、数组#flatten和数组#join。
变量
_, *body2 = str2.split("\n")
中的变量_
是这样命名的,以告诉读者它在随后的计算中不被使用。有时可能写_header, *body2 = str2.split("\n")
来传达同样的信息。下面是第二种方法,将字符串视为逗号分隔的CSV字符串。
然后
参见CSV::解析和CSV::生成。
这也可以在不将字符串转换为数组、操作这些数组以形成单个数组然后将该单个数组转换回字符串的情况下完成。
正则表达式
/(?:\n|\z)/
匹配换行符(\n
)或(|
)字符串(\z
)的结尾。请参阅String #index的格式,该格式采用可选的第二个参数,该参数指定要开始搜索的字符串索引。