如何在groovy脚本中将数组排序为3个元素的组

时间:2018-01-14 17:41:04

标签: groovy soapui

我是groovy脚本的新手,并尝试在下面的数组中排序,其中排序发生在三个元素的组中。

  

I / p:a = [9,4,5,8,9,7,4,2,3]   预期执行额:4,5,9,7,8,9,2,3,4

我尝试了很多组合但是我的循环要么进入无限循环,要么我只能排序第一组三个元素

for (int i = 0; i < a.size()-1; i++) {    
    for (int j = i + 1; j<3; j++) {    
        if (a[i] > a[j]) `enter code here`
        {
            temp = [0]
            temp = a[i]
            a[i] = a[j]
            a[j] = temp
        }
    }
}

for (int i = 0; i < a.size()-1; i++) {
    log.info a[i]+ ","
}
log.info "Data in ascending order" + a 

感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

Groovy对于这类任务非常强大:

def a = [9, 4, 5, 8, 9, 7, 4, 2, 3]
def sorted = a.collate( 3 ).collect{it.sort()} 
assert sorted == [[4, 5, 9], [7, 8, 9], [2, 3, 4]]
assert sorted.flatten() == [4, 5, 9, 7, 8, 9, 2, 3, 4]

答案 1 :(得分:0)

这是一种方法。它不是 Grooviest 代码,但它既简单又合理地接近原始代码。主要技巧是使用带有步骤的range(以便i从0,3,6开始):

def a = [9, 4, 5, 8, 9, 7, 4, 2, 3] 
def n = a.size() - 1
assert a.size() % 3 == 0

def result = []

// i = 0, 3, 6 
for (i in (0..n).step(3)) {
    def list = [a[i], a[i+1], a[i+2]]
    def x = list.min()
    def z = list.max()
    def y = list.find { item -> item != x && item != z }
    result.addAll([x, y, z])
}

assert [4,5,9,7,8,9,2,3,4] == result

答案 2 :(得分:0)

您正在尝试使用冒泡排序,但不是以正确的方式。

第一个问题是(a [i]&gt; a [j]),这里我是常数,我们在这里使用j和j + 1进行冒泡排序,因为我们比较了2个连续的元素。如果我们保持在这里,那么我在循环中是恒定的

第一组元素正在为你排序,因为前3个元素是9 4 5因为9> 4所以你交换了9&gt; 5所以交换完成所以他们交换了

冒泡排序的另一个问题是我们需要2个循环进行排序。一次性只有相邻的元素被排序。即假设元素是3 2 1.所以它将像2 3 1(2,3),然后是2 1 3(1,3)。你需要再多1次迭代(外循环)才能使它成为1 2 3。

以下是冒泡排序逻辑,它使用与您相同的逻辑,并提供您需要的输出,而无需使用任何可用的特殊方法

我试图找出无限的逻辑,但却无法破解那个......

下面的代码以最简单的方式https://ideone.com/B9fY0A

工作

1)第一个循环是2个中断元素到3个集合...所以我们选择1 4 8个元素

2)第三个循环以第一个循环决定的元素开始

3)第二个循环是为3个元素进行排序(冒泡排序需要2个循环)

def a = [9, 4, 5, 8, 9, 7, 4, 2, 3] ;
def temp=0;
print "ok";
for(int i =0; i <a.size(); i=i+3)
{
print a[i] + " "
for(int k=0; k<2;k++)
{
for(int j=i;j<i+2;j++)
{
//  print a
    if(a[j]>a[j+1])
    {
        temp=a[j];
        a[j]=a[j+1];
        a[j+1]=temp;

    }
}
}
}

log.info a

这是遵循您提到的逻辑或我们可以说的方式