func (rows *Rows) Contain(xrow *Row) (bool, int) {
	for x, row := range *rows {
		if xrow.IsEqual(row) {
			return true, x
		}
	}
	return false, -1
}
Contain return true and index of row, if rows has data that has the same value
with `row`, otherwise return false and -1 as index.
package tabula
import (
	"fmt"
	"math/rand"
	"time"
)
type Rows []*Row
func (rows *Rows) Len() int {
	return len(*rows)
}
func (rows *Rows) PushBack(r *Row) {
	if r != nil {
		(*rows) = append((*rows), r)
	}
}
func (rows *Rows) PopFront() (row *Row) {
	l := len(*rows)
	if l > 0 {
		row = (*rows)[0]
		(*rows) = (*rows)[1:]
	}
	return
}
func (rows *Rows) PopFrontAsRows() (newRows Rows) {
	row := rows.PopFront()
	if nil == row {
		return
	}
	newRows.PushBack(row)
	return
}
func (rows *Rows) Del(i int) (row *Row) {
	if i < 0 {
		return
	}
	if i >= rows.Len() {
		return
	}
	row = (*rows)[i]
	last := len(*rows) - 1
	copy((*rows)[i:], (*rows)[i+1:])
	(*rows)[last] = nil
	(*rows) = (*rows)[0:last]
	return row
}
func (rows *Rows) GroupByValue(groupIdx int) (mapRows MapRows) {
	for {
		row := rows.PopFront()
		if nil == row {
			break
		}
		key := fmt.Sprint((*row)[groupIdx])
		mapRows.AddRow(key, row)
	}
	return
}
func (rows *Rows) RandomPick(n int, duplicate bool) (
	picked Rows,
	unpicked Rows,
	pickedIdx []int,
	unpickedIdx []int,
) {
	rowsLen := len(*rows)
	if n > rowsLen && !duplicate {
		n = rowsLen
	}
	rand.Seed(time.Now().UnixNano())
	for ; n >= 1; n-- {
		idx := 0
		for {
			idx = rand.Intn(len(*rows))
			if duplicate {
				pickedIdx = append(pickedIdx, idx)
				break
			}
			isPicked := false
			for _, pastIdx := range pickedIdx {
				if idx == pastIdx {
					isPicked = true
					break
				}
			}
			if isPicked {
				continue
			}
			pickedIdx = append(pickedIdx, idx)
			break
		}
		row := (*rows)[idx]
		picked.PushBack(row)
	}
	for rid := range *rows {
		isPicked := false
		for _, idx := range pickedIdx {
			if rid == idx {
				isPicked = true
				break
			}
		}
		if !isPicked {
			unpicked.PushBack((*rows)[rid])
			unpickedIdx = append(unpickedIdx, rid)
		}
	}
	return picked, unpicked, pickedIdx, unpickedIdx
}